This application relates to systems and method for encoding and decoding constrained codes. In particular, this application relates systems and methods for enumerative run-length limited (RLL) and DC limited constrained coding.
Constrained coding refers to a code in which there are limits or “constraints” placed on the codes that are used. For example, an RLL constraint limits the number of consecutive zeros or ones within the code. The limits used by constrained coding schemes produce codewords that are less prone to errors or in which errors are more readily detected and/or corrected.
Enumerative coding refers to an encoding and decoding technique in which data is encoded as a sum of a series pre-determined numbers, which may be referred to as “cardinalities”. An enumerative encoder selects certain of the cardinalities to represent the data to be encoded and transmits the information on which cardinalities are selected to an enumerative decoder. The enumerative decoder, which has the same pre-determined cardinalities as the encoder, can reproduce the data using the information received from the encoder.
Enumerative coding techniques can be used to implement basic RLL constrained codes. Selecting certain values for the cardinalities within an enumerative encoder ensures that the codewords generated by that encoder is a desired RLL constraint. However, none of these enumerative coding techniques can be used to generate codes having additional or more complex constraints.